#include "map_querys.h"
#include <stdio.h>
#include "../io/drawer_monitor.h"

mapa_t mapa;

void set_map(mapa_t m){
	mapa=m;
}

char* get_city_name_by_id(int id){
	return mapa->ciudades[id]->nombre;
}

int get_city_id(char* nombre_ciudad){
	int i;
	for(i=0 ; i<mapa->ciudadesCant ; i++){
		if(strcmp(mapa->ciudades[i]->nombre, nombre_ciudad)==0)
			return i;
	}
	return -1;
}

droga_t get_drug_by_name(ciudad_t city, char* drug_nombre){
	int i;
	for(i=0 ; i<city->drogasCant ; i++){
		if(strcmp(city->drogas[i]->nombre, drug_nombre)==0){	
			return city->drogas[i];
		}
	}
	return NULL;
}

int get_neighbours(int** neighbours, int cityid){
	*neighbours=mapa->distancias[cityid];
	return mapa->ciudadesCant;
}


void throw_medication(int ciudad_id, int drug_cant, droga_t drugs){
	pthread_mutex_lock(&monitor.mutex);
	while(first_print || monitor.counter >= monitor.limit){
		pthread_cond_wait(&monitor.cond2, &monitor.mutex);
	}

	int min, i;
	for(i=0 ; i<drug_cant ; i++){
		droga_t drug_city = get_drug_by_name(mapa->ciudades[ciudad_id], drugs[i].nombre);
		if(drug_city!=NULL ){
			min = drugs[i].cant < drug_city->cant? drugs[i].cant : drug_city->cant;
			drug_city->cant -= min;
			drugs[i].cant -= min;
		}
	}
	pthread_mutex_unlock(&monitor.mutex);
}

int needs(int city_id, int drogasCant, droga_t * drogas){
	int i;
	for(i=0 ; i<drogasCant ; i++){
		droga_t drug_city = get_drug_by_name(mapa->ciudades[city_id], drogas[i]->nombre);
		if(drogas[i]->cant > 0 && drug_city!=NULL && drug_city->cant > 0 ){
			return 1;
		}
	}
	return 0;

}

int null_drugs_demand(){
	int i, j;
	for(i=0 ; i<mapa->ciudadesCant ; i++){
		for(j=0 ; j<mapa->ciudades[i]->drogasCant ; j++){	
			if((mapa->ciudades[i]->drogas[j])->cant){
				return 0;
			}
		}
	}
	return 1;
}

int get_city_cant(){
	return mapa->ciudadesCant;
}
